App Thinning
App Thinning이 뭐지?
WWDC 15에 App Thinning in Xcode 세션이 소개됐다. WWDC 15
면접 준비가 아니었다면 볼 일이나 있었을까.. 하는 생각이 들만큼 처음 들어보는 녀석이다.
App Thinning in Xcode은 쉽게 말해 설치 최적화 기술을 의미한다.
그 안에는 Slicing, Bitcode, On-Demand Resource가 있는데 하나하나 알아보자.

위 사진과 같이 어플은 실행가능한 코드들과 리소스들로 이루어져있다.
우리 프로젝트에는 당장에 asset만 생각해 봐도 1x, 2x, 3x 등 설치되는 디바이스에 맞춰서 동작하기 위해 필요 이상의 데이터들이 담겨있다.
만약 아이폰 13 mini 유저가 어플리케이션을 설치하려한다면 그 많은 에셋을 모두 설치해야만 할까? 필요한 데이터만 설치할 순 없을까?
그걸 위해 애플에서는 App Slicing을 지원한다.
Slicing?

만약 우리가 Universal App 하나를 업로드 하면 앱 스토어가 디바이스의 특성을 보고, 위 그림처럼 필요한 것만 조합해 별도의 IPA를 만들게 된다.
이런 최적화는 앱 스토어단에서 자동으로 해준다. (기가 막힌다.. AOS도 비슷한 로직인지 궁금해서 찾아본 결과 플레이 스토어에서 자동으로 최적화를 해주는 뭐 그런건 따로 없는 것 같다. 내가 못 찾는 걸 수도..)
하지만 애플은 여기서 멈추지 않고 On Demand Resources(ODR)이란 기능을 소개한다.
On Demand Resources(ODR)
ODR은 말 그대로 주문형 리소스이다.
예를 들어 인 앱 결제를 통해서만 얻을 수 있는 리소스가 있다고 가정해보자.
그럼 당연히 결제를 하기 전에는 다운로드 받을 필요가 없다. 이런 리소스들을 필요할 때 앱 스토어에서 그때 그때 받는 것이 ODR의 개념이다.
ODR은 Xcode - Build Settings - Enable On Demand Resources 에서 설정할 수 있다.
Bitcode?
그럼 App Thinning에 포함되어 있는 마지막 Bitcode는 뭘까?
Bitcode는 컴파일된 프로그램의 중간표현이라고 한다. (기계언어도 아니고 그렇다고 사람이 읽을 수 있는 코드도 아닌 중간단계의 코드)
이 친구가 하는 일도 최적화에 관련이 있다. Bitcode를 사용하면 최신 컴파일러용으로 자동으로 앱을 컴파일하고, 특정 아키텍쳐에 맞게 최적화 한다.
예를 들어 2013년 iPhone5에서 애플은 64비트 칩셋으로 바꾼 적이 있는데, 이때는 Bitcode가 적용 되어있지 않을 때였다. 그래서 개발자들은 코드를 수정하고 앱을 다시 컴파일해서 제출해야 했다고 한다. 이런 상황에서 Bitcode가 있었다면 이런 수고를 들일 필요 없이 새로운 아키텍처로 컴파일을 알아서 해줬을 것이다.
Bitcode는 iOS앱의 경우엔 default로 설정되어 있지만, Optional이다. 하지만 watchOS는 Bitcode가 필수라고 한다. Bitcode 설정 역시 Xcode - Build Settings - Enable Bitcode 를 통해 설정할 수 있다.
참고자료